package com.hyperplan.neptune.parser.generic;

import java.util.List;

import com.hyperplan.neptune.lexer.IdentifierKind;
import com.hyperplan.neptune.lexer.IdentifierToken;
import com.hyperplan.neptune.lexer.Token;

public class IdentifierParser implements Parser<IdentifierToken> {

	private IdentifierKind kind;
	
	public IdentifierParser(IdentifierKind kind) {
		this.kind = kind;
	}
	
	public ParserSolution<IdentifierToken> parse(List<Token> tokens, int index)
			throws ParserException {
		if (index < tokens.size()) {
			Token token = tokens.get(index);
			if (token instanceof IdentifierToken) {
				IdentifierToken identifier = (IdentifierToken)token;
				if (identifier.getKind() == kind) {
					return new ParserSolution<IdentifierToken>(identifier, index + 1);
				}
			}
			throw new ParserException(token);
		} else {
			throw new ParserException();
		}
	}
}
